package com.ben.multiple.elasticsearch.resource;

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import com.ben.multiple.elasticsearch.entity.Person;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;

@Slf4j
@Component
public class PersonService {
    static AtomicLong atomicInteger = new AtomicLong();

    static {
        atomicInteger.set(System.currentTimeMillis());
    }

    public static Person createOne() {
        Snowflake snowflake = IdUtil.getSnowflake();
        Person obj = new Person();
        obj.setId(atomicInteger.getAndIncrement());
        obj.setRegisterTime(LocalDateTime.now());
        obj.setName("阿三");
        obj.setAge(100);
        obj.setBirthday(LocalDate.of(2000, 10, 10));
        obj.setBirthLocation(randomGeoPoint());
        obj.setBirthAddress("湖北省武汉市东西湖武汉市江汉区新华西路728号");

        obj.setIdCardNo(snowflake.nextIdStr());
        obj.setHeight(BigDecimal.valueOf(188.32));
        obj.setWeight(BigDecimal.valueOf(145.67));
        obj.setEducation("大学本科");
        obj.setMajor("计算机科学与技术");

        obj.setSchool("武汉大学");
        obj.setHobbit(List.of("陶艺", "烧木", "烙画", "烘焙", "拼图"));
        obj.setStatus((short) 1);
        obj.setRemark("如果您希望为您的生活注入一些乐趣和创造力，那么有很多爱好可以做到这一点。素描和绘画是两种创造性的追求，为探索不同的技术和风格提供了巨大的潜力。学习演奏乐器是表达您的创造力的另一种好方法，并且有很多在线教程可以帮助您入门。园艺也可以是一种很好的创意爱好，可以尝试不同的植物和颜色组合来创造您自己独特的户外空间。");
        return obj;
    }

    public static List<Person> createBatch(int size) {
        List<Person> list = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            Person obj = randomPerson();
            list.add(obj);
        }
        return list;
    }

    static Snowflake snowflake = IdUtil.getSnowflake();
    static final int[] years = new int[100];
    static final int[] months = new int[12];
    static final int[] days = new int[28];
    static final int[] hours = new int[24];
    static final int[] minutes = new int[60];
    static final int[] seconds = new int[60];
    static final String hanzi = "乙一乃丁卜刀九了七八厂儿二几力人入十又久丸丈乞乡勺刃亏凡卫亿亡叉川寸弓巾女尸士夕么万三上下与习也之义于个千及大飞干工广己已口马门山才土小子丰乏乌丹予丑勾勿匀厅允互井云匹凤冈劝凶仓介仇仅仆仁仍升午订双友艺屯夫巨币尺扎巴忆幻尤孔贝父户斤木牛欠犬氏瓦牙止爪中书无不专为公六历切元五区队内办从今以化什计认反太天引开少比长车斗方风火见毛片气日手水王文心月支分卡册乎乐丘丙丛丝匆占厉刊兄兰印功击令付仙仪仔仗让讨讯训辽失央巧左归帅叨叼叮句古另叶司台叹右召闪宁奶奴犯尼饥扒扑扔汉汇汁纠圣幼冬孕轧灭斥末未旦旧礼永甘瓜禾矛母鸟皮甲申田穴甩玉业东且世主包北加务写出代们他半去记议发节边对头平布市号叫可史只它打四外处本术民必正白立龙目生石示电由用乓乒乔丢买兴冰冲厌创刚刘刑兆亚匠防邪阳阴阵网劣企伞仰伐仿伏伙伤似伟伪伍休优协充亦访讽讲延芒芝巡州迈迁迅寺寻夺夹夸巩异庆庄帆师吃吊吓吉吗吐吸驰闭闯守宇宅妇奸妈妄岂岁屿尽壮扛扣扩扫托扬执池汗汤污纪纤圾尘尖忙孙字负贞毕轨死危爷戏灯灰考朵朴杀朽杂朱欢旬早旨曲肌臣虫耳齐肉舌羽舟竹页衣血羊份共决压争划列则光先阶那关再动军农会众传价件任全华产交论设许达过导并年当合各后名同向问安好如她江红级约场地在回团因多式存成观老机权收次有此百而米色西行至自串丽乱兵冻冷冶初免龟判删医阿陈附邻陆邮阻卵助劫劲励努余伯伴佛估伶伸佣亩词评诉译诊苍芳芦芹苏芽彻役迟返违迎远寿弟弄弃床库序希帐吧吵呈吹呆吨否告含吼君启吞呜吴呀驳驴驱闷闲宏宋妨妙妥妖狂犹岔岛岗尿尾饭饮壳扮抄扯抖扶抚护拒抗扭抛批抢扰折投找抓沉泛沟汽沙沈汪沃纯纺纲纳纽纱纹纸纵坝坊坏坚均坑块坛址坐困围园怀忧孝财贡歼戒灿灵灾灶材村杜杆杠李束杏杨牢攻旱旷忌忍忘肠肚肝皂私秃秀钉针盯疗鸡男穷补良辰赤豆谷麦辛言足吩坟纷芬两严况别利际即却劳但低何你体位住作克县识证花还进近连运这张应听员间完形层局声把报技没快我极来条改状时社求志更步每究系角里身走乖丧乳典净卧厕券兔刺刮剂刻刷降郊郎陕限郑凯凭势侧供佳佩侨侍依侦侄卖享诚诞诗试详询叔范苦茄茎茅茂苗苹若英彼径征迫述奔奉奇幸弦底店废庙录帘帖帜咐呼呢味咏驾驶驼驻闹闸宝官审宜宙宗姑姐妹妻姓狗狐岸岭岩届居屈饱饰饲拔拌抱拨拆抽担抵拐拣拘拦拢抹拍披抬拖押拥择招波泊沸河浅泪沫泥泡泼泄泻沿泳泽沾注练绍终垂垃垄坡坦固夜尚怖怪怜怕孤季孟败贩贯货贫贪贤责购轰轮软卷爸房炒炊炕炉炎视斧斩板杯柜杰枪松析枣枕枝牧版欧欣昂昌昏昆旺承环玩忽念态忠肥肺肤服股肩肯朋肾胁胀肢肿武爬秆钓盲鸣码罗畅画衬衫艰虎虏舍肃齿隶鱼雨顶顷奋事其具到制些例使单参京该话建变取受往府和命周定实始委拉法油治经细线织组国图性备学质转或所规现者构果林物放明易育的直矿知空采非金青表临举厚厘剑剃削陡险卸冒勉勇冠促俘俭俊俩侵俗侮修亮亭诵误诱语叛叙草茶荡荒茧荐茫荣药待迹迷逆送逃退追封奖奏差弯庭帮帝哀哈咳哄哗哪咸哑咽咬咱骄骆骂阀阁闻宫客室宪宣姜娇姥娃威姨姻姿独狠狡狮狭狱峡屋饼饺饶挡挂挥挤挎括挠挪拼拾拴挑挺挖挣测洞洪浑浇洁津浓洽洒洗洋洲浊绑绘绞绝络绕绒巷城垫垦垮垒尝恨恒恢恼恰孩贷费贵贺贱贸贴轻残殃施扁炮烂炼炭炸既觉览柏柄栋架枯栏柳某染柔柿树柱牵牲故春显星映昼昨神祝祖拜泉玻珍怠急怒怨怎胞背胆胡脉胖胜胃歪皇皆甚秒秋钞钢钩钥钟竖盆盈毒盾眉盼眨疤疮疯疫鸦砍砌砖矩罚畏穿窃突袄虾虹蚂蚀虽蚁耐耍缸竿赴赵趴食骨鬼首香项顺美前除院养保便信南亲说很律适选将度带品响按持指活济派给结统型复点战标查政是段思总种科看省相研界类要重革面音须乘羞凉剥剧剖匪陵陪陶陷兼冤倍倡倘倒俯健借俱倦倾倚债读课谅请谁谊诸谈荷获莲莫徒徐递逗逢逝透途逐射套弱座席啊唉唇哥唤哭哨唐哲阅宾害宽宵宴宰娘娱狼狸峰屑饿壶挨捕换捡捐捆捞捏捎损挽振捉涌浮浩浸浪涝润涉涛涂浴涨浙继绢绣埋恭悔悄悟悦夏贿贼毙烈轿载殊旁旅爹扇烦烘烤烧烫烟烛笔案柴档桂核桨校框栗桥桑桃桐栽株桌牺敌氧晃晋晒晌晓晕祥拿拳浆泰瓶班珠恶恩恳恐恋息脆胳脊胶朗脑胸脏脂爱秘秤秧秩租铃铅钱钳钻竞站监盐益盏眠病疾疲疼症鸭皱础破罢畜留窄袜袍袖蚕蚊耻耽缺虑耕耗紧索艳翅翁致舱航舰笋笑臭辱躬酒配赶顾顽顿预衰粉准原党部都候值调速通造验家容展海流消圆离资热较料格根样特效能称积铁真被素般起难高匙凑减剪副隆随隐兽勒偿假偶偏停偷谎谜谋菠菜菊菌萝萌萍萄营著逮弹康廊庸唱啦售唯啄骑寄寇密宿婚婆婶猜猎猫猛猪崇崖崭彩屠馆馅掉捷掘控掠描排捧授探掏推掀掩淡混渐淋渠渗淘添淹液渔绸绩绿绵绳绪续堵堆培堂域圈够惭惨悼惯惊惧惕惜辅辆斜旋戚毫检梨梁梅梦梢梳梯桶械犁敢救敏欲晨晚祸球患您悉悬悠爽脖脚脸脱望甜移铲铜银竟章笼盛盗盖盒盘眯睁痕痒鸽票略窑蛋蛇聋职虚粗粒粘累衔船笨笛符野距跃雪雀黄鹿麻颈袭袋做得常商接据清深维基情族断教理眼着率第象领羡厨厦割剩隔隙傲傍储傅博谦谢谣葱董葛葵落葡葬循御逼遍遗遇尊奥幅帽喘喊喝喉喇喷善喂喜骗阔富寒嫂猴猾屡馋插搭搁搅揭揪搂揉搜握援渡溉港湖滑渴湿湾游渣滋编缎缓缘堡塔堤堪悲惰慌慨愧禽愉赌赔赏焦煮辈辉殖焰毯棒棍椒棵棉棚棋森椅植棕牌敞敬散款欺晶景普晴暑暂智掌琴斑惩惠惑惹曾替朝腊脾腔登稍税稀锄锋锅链铺锐锁销锈铸童痛鹅硬短番窗窜窝疏裤裙裕蛮蜓蛙蛛粥絮紫舒艇策答筋筐筛筒筝筑释辜超趁趋跌践跑鲁雄雅雁黑颂街裁裂愤粪道强属提温就然斯最期程确联等量越集题装鄙障勤催傻像谨叠蓝蒙蓬蒜蓄蒸微遣遥廉幕嗓嫁嫌摆搬搏搞摸摄摊携摇滨滚滥溜滤漠滩滔溪源缠缝墓塞塑塌塘填慎赖煎输煌煤楚概槐楼榆歇献暗暖福殿毁瑞愁慈愚愈腹腾腿腥腰稠锤错键锦锯锣锡盟睬督睛睡痰鹊碍碑碌碰碎碗矮禁罩罪蛾蜂舅粮粱肆筹简签触躲辟辞誉酬酱跟跪跨跳龄鉴雹雷零雾魂韵鼓鼠满照新数感想意置解路群凳僚谱蔽蔑遭遮弊嘉嗽骡察寨嫩馒摧撇摔摘滴漏漫漂漆演缩境墙舞慕慢赛赚熊旗截熔熄榜榴模榨敲歌歉暮璃愿膀膊膏膜稳锻锹端竭瘦碧磁疑蜡蜜蜻蝇蜘聚腐裳裹翠箩豪辣誓酷酿貌静鲜魄鼻颗精管算酸需劈僵僻蕉蔬德遵嘱播撤撑撒撕撞潮潜墨懂熟飘槽横橡樱暴摩毅慧慰膛膝稻稿镇瞒瞎蝶蝴聪糊艘箭篇箱躺醋醉趣趟踩踏踢踪靠霉震鞋黎额颜影增凝薄薯薪避邀嘴操激澡缴壁懒赞赠燕燃橘膨稼镜磨融糕糖篮辨辩醒蹄餐雕默衡颠器整藏骤擦赢戴燥臂穗瞧螺糠糟繁翼辫蹈霜霞鞠镰鹰覆翻蹦鞭爆攀瓣疆警蹲颤嚼嚷灌壤耀籍躁魔蠢霸露囊罐匕刁丐邓冗仑讥夭歹戈乍冯卢凹凸艾夯叭叽囚尔皿矢玄匈邦阱邢凫伦伊仲亥讹讳诀讼讶廷芍芋迄迂夷弛吏吕吁吆驮驯妆屹汛纫旭肋臼卤刨匣兑罕伺佃佑诈诅芭芙芥苇芜芯巫庇庐吠吭吝呐呕呛吮吻吟吱闰妒妓姊狈岖彤屁扳扼抠抡拟抒抑沧沪沥沦沐沛汰汹纬坎坞坠囱囤忱轩灸灼杈杉杖牡汞玖玛韧肛肖肘鸠甸甫邑卦刹刽陌陋郁函侈侥侣侠卑卒卓叁诡苞苟苛茉苫苔茁奈奄弧弥庞帕帚呵哎咖咕咙咆呻咒驹宠宛姆狞岳屉拗拂拇拧拓拄拙泌沽沮泞泣沼绊绅绎坷坤坯坪怯怔贬账贮炬觅枫杭枚枢枉玫昙昔氓祈殴瓮肮肪肴歧秉疙疚矾衩虱疟忿氛陨勃勋俄侯俐俏诲诫诬茬茴荤荠荚荆荔荞茸茵荧徊逊契奕哆咧咪哟咨骇闺闽宦娄娜姚狰峦屏屎饵拱拷拭挟拯洛洼涎垛垢恍恃恬恤幽贰轴飒烁炫毡柑枷柬柠柒栅栈氢昧昵昭祠泵玷玲珊胧胚胎秕钝钙钧钠钮钦盅盹鸥砂砚蚤虐籽衍韭凌凄剔匿郭卿俺倔诽诺谆荸莱莉莽莺莹逞逛哺哼唧唠哩唆哮唁骏娩峻峭馁捌挫捣捍捅捂涤涡涣涧浦涩涕埃埂圃悍悯贾赁赂赃羔殉烙梆桦栖栓桅桩氨挚殷瓷斋恕胯脓脐胰秦秫钾铆疹鸵鸯鸳砾砰砸祟畔窍袒蚌蚪蚣蚜蚓耿聂耸舀耙耘紊笆酌豹豺颁袁衷乾厢兜匾隅凰冕勘傀偎谍谓谐谚谒菲菇菱菩萨萎萧萤徘徙巢逻逸尉奢庵庶啡唬啃啰啤啥唾啸阐阎寂娶婉婴猖崩崔崎彪彬掺捶措掸掂捺捻掐掖掷淳淀涵淮淑涮淌淆涯淫淤渊绷绰综绽缀埠堕悴惦惋赊烹焊焕梗梭梧敛晦晤祷琅琉琐曹曼脯秽秸铛铐铝铭铣铡盔眷眶痊鸿硅硕矫祭畦窒裆袱蛆蛉蚯蛀聊翎舶舵舷笙笤赦麸躯酗酝趾颅颇衅隘募凿谤蒂葫蒋遏遂逾奠喳啼喧喻骚寓媒媚婿猬猩嵌彭壹搀揣搓揩揽搔揖揍渤溅溃渺湃湘滞缔缆缕缅堰愕惶赐赋赎焙椎棺棘榔棱棠椭椰犀牍敦氮氯晾晰掰琳琼琢韩惫腌腕腋锉锌竣痘痪痢鹃甥硫硝畴窖窘蛤蛔蜒粟粤翘翔筏酣酥跋跛雳雇鼎黍颊焚剿谬蓖蒿蒲蓉廓幌嗤嗜嗦嗡嗅寞寝嫉媳猿馏馍搪漓溺溶溯溢滓缤缚煞辐辑斟椿楷榄楞楣楔暇瑰瑟腻腮腺稚锭锚锰锨锥睹瞄睦痹痴鹏鹉碘碉硼禀署畸窟窥褂裸蜀蜕蜗蜈蛹聘肄筷誊酪跺跷靖雏靶靴魁颓颖频衙兢隧僧谭蔼蔓蔫蔚箫蔗幔嘀嘁寡寥嫡彰漱漩漾缨墅慷孵赘熬熙熏辖辕榕榛摹镀瘩瘟碴碟碱碳褐褪蝉舆粹舔箍箕赫酵踊雌凛谴蕊蕴幢嘲嘿嘹嘶嬉履撮撩撵撬擒撰澳澈澄澜潦潘澎潭缭墩懊憔憎樊橄樟敷憋憨膘稽镐镊瘪瘤瘫鹤磅磕碾褥蝙蝠蝗蝌蝎褒翩篓豌豫醇鲫鲤鞍冀儒蕾薇薛噩噪撼擂擅濒缰憾懈辙燎橙橱擎膳瓢穆瘸瘾鹦窿蟆螟螃糙翰篡篙篱篷踱蹂鲸霍霎黔儡藐徽嚎壕懦赡檩檬檀檐曙朦臊臀爵镣瞪瞭瞬瞳癌礁磷蟥蟀蟋糜簇豁蹋鳄魏藕藤嚣瀑戳瞻癞襟璧鳍蘑藻攒孽癣蟹簸簿蹭蹬靡鳖羹巍攘蠕糯譬鳞鬓躏霹髓蘸瓤镶矗";
    static final int hanzisize = hanzi.length();

    static final String[] educations = {"小学", "初中", "高中", "大专", "本科", "硕士", "博士", "博士后", "中专", null};
    static final int educationssize = educations.length;

    static final String[] majors = {null, "哲学", "逻辑学", "宗教学", "经济学", "经济统计学", "财政学", "税收学", "金融学", "金融工程", "保险学", "投资学", "国际经济与贸易", "贸易经济", "法学", "政治学与行政学", "国际政治", "外交学", "社会学", "社会工作", "民族学", "科学社会主义", "中国共产党历史", "思想政治教育", "治安学", "侦查学", "边防管理", "教育学", "科学教育", "人文教育", "教育技术学", "艺术教育", "学前教育", "小学教育", "特殊教育", "体育教育", "运动训练", "社会体育指导与管理", "武术与民族传统体育", "运动人体科学", "汉语言文学", "汉语言", "汉语国际教育", "中国少数民族语言文学", "古典文献学", "英语", "俄语", "德语", "法语", "西班牙语", "阿拉伯语", "日语", "波斯语", "朝鲜语", "菲律宾语", "梵语巴利语", "印度尼西亚语", "印地语", "柬埔寨语", "老挝语", "缅甸语", "马来语", "蒙古语", "僧伽罗语", "泰语", "乌尔都语", "希伯来语", "越南语", "豪萨语", "斯瓦希里语", "阿尔巴尼亚语", "保加利亚语", "波兰语", "捷克语", "斯洛伐克语", "罗马尼亚语", "葡萄牙语", "瑞典语", "塞尔维亚语", "土耳其语", "希腊语", "匈牙利语", "意大利语", "泰米尔语", "普什图语", "世界语", "孟加拉语", "尼泊尔语", "克罗地亚语", "荷兰语", "芬兰语", "乌克兰语", "挪威语", "丹麦语", "冰岛语", "爱尔兰语", "拉脱维亚语", "立陶宛语", "斯洛文尼亚语", "爱沙尼亚语", "马耳他语", "哈萨克语", "乌兹别克语", "祖鲁语", "拉丁语", "翻译", "商务英语", "新闻学", "广播电视学", "广告学", "传播学", "编辑出版学", "历史学", "世界史", "考古学", "文物与博物馆学", "数学与应用数学", "信息与计算科学", "物理学", "应用物理学", "核物理", "化学", "应用化学", "天文学", "地理科学", "自然地理与资源环境", "人文地理与城乡规划", "地理信息科学", "大气科学", "应用气象学", "海洋科学", "海洋技术", "地球物理学", "空间科学与技术", "地质学", "地球化学", "生物科学", "生物技术", "生物信息学", "生态学", "心理学", "应用心理学", "统计学", "应用统计学", "理论与应用力学", "工程力学", "机械工程", "机械设计制造及其自动化", "材料成型及控制工程", "机械电子工程", "工业设计", "过程装备与控制工程", "车辆工程", "汽车服务工程", "测控技术与仪器", "材料科学与工程", "材料物理", "材料化学", "冶金工程", "金属材料工程", "无机非金属材料工程", "高分子材料与工程", "复合材料与工程", "能源与动力工程", "电气工程及其自动化", "电子信息工程", "电子科学与技术", "通信工程", "微电子科学与工程", "光电信息科学与工程", "信息工程", "自动化", "计算机科学与技术", "软件工程", "网络工程", "信息安全", "物联网工程", "数字媒体技术", "土木工程", "建筑环境与能源应用工程", "给排水科学与工程", "建筑电气与智能化", "水利水电工程", "水文与水资源工程", "港口航道与海岸工程", "测绘工程", "遥感科学与技术", "化学工程与工艺", "制药工程", "地质工程", "勘查技术与工程", "资源勘查工程", "采矿工程", "石油工程", "矿物加工工程", "油气储运工程", "纺织工程", "服装设计与工程", "轻化工程", "包装工程", "印刷工程", "交通运输", "交通工程", "航海技术", "轮机工程", "飞行技术", "船舶与海洋工程", "航空航天工程", "飞行器设计与工程", "飞行器制造工程", "飞行器动力工程", "飞行器环境与生命保障工程", "武器系统与工程", "武器发射工程", "探测制导与控制技术", "弹药工程与爆炸技术", "特种能源技术与工程", "装甲车辆工程", "信息对抗技术", "核工程与核技术", "辐射防护与核安全", "工程物理", "核化工与核燃料工程", "农业工程", "农业机械化及其自动化", "农业电气化", "农业建筑环境与能源工程", "农业水利工程", "森林工程", "木材科学与工程", "林产化工", "环境科学与工程", "环境工程", "环境科学", "环境生态工程", "生物医学工程", "食品科学与工程", "食品质量与安全", "粮食工程", "乳品工程", "酿酒工程", "建筑学", "城乡规划", "风景园林", "安全工程", "生物工程", "刑事科学技术", "消防工程", "农学", "园艺", "植物保护", "植物科学与技术", "种子科学与工程", "设施农业科学与工程", "农业资源与环境", "野生动物与自然保护区管理", "水土保持与荒漠化防治", "动物科学", "动物医学", "动物药学", "林学", "园林", "森林保护", "水产养殖学", "海洋渔业科学与技术", "草业科学", "基础医学", "临床医学", "口腔医学", "预防医学", "食品卫生与营养学", "中医学", "针灸推拿学", "藏医学", "蒙医学", "维医学", "壮医学", "哈医学", "中西医临床医学", "药学", "药物制剂", "中药学", "中药资源与开发", "法医学", "医学检验技术", "医学实验技术", "医学影像技术", "眼视光学", "康复治疗学", "口腔医学技术", "卫生检验与检疫", "护理学", "管理科学", "信息管理与信息系统", "工程管理", "房地产开发与管理", "工程造价", "工商管理", "市场营销", "会计学", "财务管理", "国际商务", "人力资源管理", "审计学", "资产评估", "物业管理", "文化产业管理", "农林经济管理", "农村区域发展", "公共事业管理", "行政管理", "劳动与社会保障", "土地资源管理", "城市管理", "图书馆学", "档案学", "信息资源管理", "物流管理", "物流工程", "工业工程", "电子商务", "旅游管理", "酒店管理", "会展经济与管理", "艺术史论", "音乐表演", "音乐学", "作曲与作曲技术理论", "舞蹈表演", "舞蹈学", "舞蹈编导", "表演", "戏剧学", "电影学", "戏剧影视文学", "广播电视编导", "戏剧影视导演", "戏剧影视美术设计", "录音艺术", "播音与主持艺术", "动画", "美术学", "绘画", "雕塑", "摄影", "艺术设计学", "视觉传达设计", "环境设计", "产品设计", "服装与服饰设计", "公共艺术", "工艺美术", "数字媒体艺术"};
    static final int majorssize = majors.length;

    static final String[] schools = {null, "武汉大学", "华中科技大学", "武汉科技大学", "长江大学", "武汉工程大学", "中国地质大学（武汉）", "武汉纺织大学", "武汉轻工大学", "武汉理工大学", "华中农业大学", "华中师范大学", "黄冈师范学院", "汉江师范学院", "中南财经政法大学", "武汉体育学院", "中南民族大学", "江汉大学", "三峡大学", "荆楚理工学院", "武汉音乐学院", "武汉商学院", "武汉东湖学院", "汉口学院", "武昌首义学院", "武昌理工学院", "武汉生物工程学院", "武汉晴川学院", "武汉城市学院", "三峡大学科技学院", "武汉文理学院", "武汉工程大学邮电与信息工程学院", "武汉纺织大学外经贸学院", "武昌工学院", "武汉工商学院", "荆州学院", "长江大学文理学院", "武汉体育学院体育科技学院", "文华学院", "武汉学院", "武汉工程科技学院", "武汉华夏理工学院", "武汉传媒学院", "武汉设计工程学院", "武汉职业技术学院", "黄冈职业技术学院", "长江职业学院", "荆州理工职业学院", "鄂州职业大学", "武汉城市职业学院", "武汉船舶职业技术学院", "恩施职业技术学院", "襄阳职业技术学院", "武汉工贸职业学院", "荆州职业技术学院", "武汉工程职业技术学院", "仙桃职业学院", "武汉航海职业技术学院", "武汉铁路职业技术学院", "武汉软件工程职业学院", "随州职业技术学院", "武汉电力职业技术学院", "武汉警官职业学院", "武汉科技职业学院", "武汉外语外事职业学院", "武汉信息传播职业技术学院", "武昌职业学院", "武汉商贸职业学院", "武汉交通职业学院", "咸宁职业技术学院", "长江工程职业技术学院", "江汉艺术职业学院", "武汉民政职业学院", "黄冈科技职业学院", "三峡电力职业学院", "三峡旅游职业技术学院", "天门职业学院", "襄阳汽车职业技术学院", "武汉海事职业学院", "长江艺术工程职业学院", "荆门职业学院", "武汉铁路桥梁职业学院", "武汉光谷职业学院", "襄阳科技职业学院", "宜昌科技职业学院"};
    static final int schoolssize = schools.length;

    static {
        for (int i = 0; i < 100; i++) {
            years[i] = i + 1930;
        }
        for (int i = 0; i < 12; i++) {
            months[i] = i + 1;
        }
        for (int i = 0; i < 28; i++) {
            days[i] = i + 1;
        }
        for (int i = 0; i < 24; i++) {
            hours[i] = i;
        }
        for (int i = 0; i < 60; i++) {
            minutes[i] = i;
        }
        for (int i = 0; i < 60; i++) {
            seconds[i] = i;
        }
    }

    static Person randomPerson() {
        Person obj = new Person();
        obj.setId(atomicInteger.getAndIncrement());
        obj.setRegisterTime(randomRegisterTime());
        obj.setName(randomName());
        obj.setAge(randomAge());
        obj.setBirthday(randomBirthday());
        obj.setBirthLocation(randomGeoPoint());
        obj.setBirthAddress(randomBirthAddress());

        obj.setIdCardNo(snowflake.nextIdStr());
        obj.setHeight(randomHeight());
        obj.setWeight(randomWeight());
        obj.setEducation(randomEducation());
        obj.setMajor(randomMajor());

        obj.setSchool(randomSchool());
        obj.setHobbit(randomHobbit());
        obj.setStatus(randomStatus());
        obj.setRemark(randomRemark());
        return obj;
    }

    static LocalDateTime randomRegisterTime() {
        Random random = new Random();
        return LocalDateTime.of(years[random.nextInt(100)], months[random.nextInt(12)], days[random.nextInt(28)],
                hours[random.nextInt(24)], minutes[random.nextInt(60)], seconds[random.nextInt(60)]);
    }

    static String randomName() {
        Random random = new Random();
        char a = hanzi.charAt(random.nextInt(hanzisize));
        char b = hanzi.charAt(random.nextInt(hanzisize));
        char c = hanzi.charAt(random.nextInt(hanzisize));
        return a + String.valueOf(b) + c;
    }

    static int randomAge() {
        Random random = new Random();
        return random.nextInt(100) + 1;
    }

    static LocalDate randomBirthday() {
        Random random = new Random();
        return LocalDate.of(years[random.nextInt(100)], months[random.nextInt(12)], days[random.nextInt(28)]);
    }

    static String randomBirthAddress() {
        Random random = new Random();
        int i = random.nextInt(hanzisize - 11);
        String a = hanzi.substring(i, i + 10);
        int j = random.nextInt(hanzisize - 11);
        String b = hanzi.substring(j, j + 10);
        int k = random.nextInt(hanzisize - 11);
        String c = hanzi.substring(k, k + 10);
        return a + b + c;
    }

    static BigDecimal randomHeight() {
        Random random = new Random();
        int a = random.nextInt(100) + 100;
        double v = a + random.nextInt(100) / 100.0;
        return BigDecimal.valueOf(v).setScale(2, RoundingMode.HALF_UP);
    }

    static BigDecimal randomWeight() {
        Random random = new Random();
        int a = random.nextInt(50) + 40;
        double v = a + random.nextInt(100) / 100.0;
        return BigDecimal.valueOf(v).setScale(2, RoundingMode.HALF_UP);
    }

    static String randomEducation() {
        Random random = new Random();
        return educations[random.nextInt(educationssize)];
    }

    static String randomMajor() {
        Random random = new Random();
        return majors[random.nextInt(majorssize)];
    }

    static String randomSchool() {
        Random random = new Random();
        return schools[random.nextInt(schoolssize)];
    }

    static List<String> randomHobbit() {
        Random random = new Random();
        if (random.nextInt(10) % 3 == 0) {
            return null;
        }
        int i = random.nextInt(hanzisize - 10);
        String a = hanzi.substring(i, i + 3);
        int j = random.nextInt(hanzisize - 10);
        String b = hanzi.substring(j, j + 3);
        int k = random.nextInt(hanzisize - 10);
        String c = hanzi.substring(k, k + 3);
        return List.of(a, b, c);
    }

    static short randomStatus() {
        Random random = new Random();
        return (short) random.nextInt(3);
    }

    static String randomRemark() {
        Random random = new Random();
        if (random.nextInt(10) % 3 == 0) {
            return null;
        }
        int i = random.nextInt(hanzisize - 200);
        String a = hanzi.substring(i, i + 100);
        int j = random.nextInt(hanzisize - 100);
        String b = hanzi.substring(j, j + 50);
        return a + "," + b + "。";
    }

    public static void main(String[] args) throws IOException {
        List<String> strings = Files.readAllLines(Paths.get("D:\\temp\\Untitled1.txt"));
        String all = "";
        List<String> list = new ArrayList<>();
        for (String s : strings) {
            if (StringUtils.hasText(s)) {
                String s1 = s.trim().replaceAll("\\w", "").trim().replaceAll(" ", "").trim();
                int i = s1.indexOf("湖北");
                String substring = s1.substring(0, i);
                list.add(substring);

            }
        }
        List<String> r = new ArrayList<>();
        for (String s : list) {
            if (StringUtils.hasText(s)) {
                String e = "\"" + s.trim() + "\"";
                r.add(e);
            }
        }
        log.info("========== : {}", r);
    }

    private static GeoPoint randomGeoPoint() {
        int startLon = 105;
        int endLon = 119;
        int startLac = 28;
        int endLac = 34;
        Random random = new Random();
        int intLon = random.nextInt(endLon - startLon) + startLon;
        int intLac = random.nextInt(endLac - startLac) + startLac;
        Random randomD = new Random();
        int a = randomD.nextInt(1000);
        int b = randomD.nextInt(1000);
        double lon = intLon + ((double) a / 1000.0);
        double lac = intLac + ((double) b / 1000.0);
        return new GeoPoint(lac, lon);
    }

}
